草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 用于在 auto_ptr 和 unique_ptr 之间切换的宏

在一个仍然使用C++11之前版本的项目中,我想通过使用C++11编译器进行编译并修复错误来为切换准备源代码。它们包括std::auto_ptr的实例替换为std::unique_ptr必要时,用std::move()包裹智能指针一些0和NULL替换为nullptr现在我想切换回C++之前的编译器并编写一个可以切换回更改的宏,这样,当最后的编译器切换时间到了时,我只需删除宏。我试过了#ifndefHAVE_CXX11#definenullptrNULLnamespacestd{#defineunique_ptrauto_ptr}#endif(使用exvector与智能指针一起使用的示例类

c++ - 如果我的钱有限,如何在 DAG 中找到最便宜的方式?

因此,如果我有一个有向无环图,其中每条边的成本为0或大于0,如果它大于0,它将具有负权重(所以你可以花5美元得到它,它会缩短例如,按您的方式-20)。我知道我们可以很容易地在DAG中找到最短/最便宜的方式,但是如果我们的钱有限怎么办?那么想象下一种情况:我们有8block钱。该算法会找到最短路径,即-10+-3=-13,但它会花费12,但我们只有8block钱,所以它不是一个选项。理想的路径是-10+0,只花费7钱。有没有一种算法可以用来解决这个问题? 最佳答案 这个问题是NP-Hard,减少了Knapsack-Problem.简短

c++ - 我是否正确理解了 Scott Meyers 的 std::weak_ptr 示例的要点?

EffectiveModernC++(第136页)使用以下示例来激发std::weak_ptr。缓存被定义为一个无序的映射,具有指向对象的弱指针作为值。每当此缓存的客户端请求一个对象(通过键)时,就会查找相应的弱指针并在其上调用lock()。如果生成的std::shared_ptr不是null,则返回它。否则,对象从外部数据库重新加载,进入缓存并返回std::shared_ptr。现在的问题是:人们可能认为可以在没有std::weak_ptr的情况下实现这一点,而是将强共享指针存储为缓存值。如果强指针的use_count()为1,则表示客户端的所有指针都已销毁。这个例子的重点是使用st

c++ - CUDA cudaMemcpy 数组结构

我想在我的项目中清理CUDA内核的参数。现在,内核需要3个uint32_t数组,这导致代码非常难看:(id表示全局线程ID,valX是某个任意值)__global__voidsome_kernel(uint32_t*arr1,uint32_t*arr2,uint32_t*arr3){arr1[id]=val1;arr2[id]=val2;arr3[id]=val3;}我想用一个结构包围所有这些数组:typedefstructS{uint_32_tarr1,uint_32_tarr2,uint_32_tarr3,uint32_tsize}S;其中size表示结构中每个arrX的长度。我想

c++ - 在 C/C++ 中高效地从结构化文件中读取数据

我有一个文件如下:该文件由两部分组成:标题和数据。数据部分被分成大小相等的页面。每个页面都包含特定指标的数据。可能需要多个页面(不需要连续)来保存单个指标的数据。每个页面由页眉和页体组成。页眉有一个名为“下一页”的字段,它是保存相同指标数据的下一页的索引。页面主体包含真实数据。所有页面具有相同且固定的大小(header为20字节,body为800字节(如果数据量小于800字节,将填充0)。header部分由20,000个元素组成,每个元素都有关于特定指标的信息(点1->点20000)。一个元素有一个名为“第一页”的字段,它实际上是保存指标数据的第一页的索引。文件最大可达10GB。要求:

c++ - C/C++ 下划线 t/type (_t/_type) 和类名?

我理解下划线t(_t)是用来标识类型的,下划线type(_type)也是,通常在typedef语句中.用法是否略有不同(例如,模板使用下划线类型,非模板使用下划线t)?为什么不在声明中使用它们?例如:classperson_t{};enumerror_t{};这与之前关于下划线t的问题不同,因为它还要求区分下划线类型。此外,(盲目地)很明显,这两个后缀只是约定俗成,但不清楚为什么它们都用于C++标准。例如,std::size_t与std::istream::pos_type。 最佳答案 对于您的第一个问题,我不知道有任何答案,我相信

c++ - 与 fgetc() 一起使用的整型变量

我试图理解一些基本代码,但被下面的代码弄糊涂了intmain(){FILE*fp;intc;intn=0;fp=fopen("file.txt","r");if(fp==NULL){perror("Errorinopeningfile");return(-1);}do{c=fgetc(fp);if(feof(fp)){break;}printf("%c",c);}while(1);fclose(fp);return(0);}谁能解释为什么c是整数类型,即使它是由fgetc(fp)定义的,据我所知,它只获取下一个字符? 最佳答案 鉴于

c++ - nVidia 推力 : device_ptr Const-Correctness

在我广泛使用nVidiaCUDA的项目中,我有时会使用Thrust来做它做得非常非常好的事情。Reduce是一种在该库中实现得特别好的算法,reduce的一个用途是通过将每个元素除以所有元素的总和来规范化非负元素的vector元素。templatevoidnormalise(Tconst*constd_input,constunsignedintsize,T*d_output){constthrust::device_ptrX=thrust::device_pointer_cast(const_cast(d_input));Tsum=thrust::reduce(X,X+size);t

c++ - 异常 : bad_weak_ptr while shared_from_this

当我这样做时出现异常:std::bad_weak_ptr->shared_from_this()templateclasspainter_record_t{.......private:std::shared_ptr_owner;}这里我想在构造函数中设置“问题”对象:templateclassstream_record_t:publicpainter_record_t{public:stream_record_t(std::shared_ptrowner):painter_record_t(owner){//...}}我有基类:classi_painter_t{public:virt

c++ - std::unique_ptr 使用带有少量参数的自定义删除器

我想知道是否可以使用多个参数(标准删除器签名)为std::unique_ptr指定自定义删除器。我知道std::shared_ptr存在std::bind的解决方法,这使得它成为可能但是std::unique_ptr存在一些技巧吗?对我来说似乎不是因为根据http://en.cppreference.com/w/cpp/memory/unique_ptr:Typerequirements-DeletermustbeFunctionObjectorlvaluereferencetoaFunctionObjectorlvaluereferencetofunction,callablewit